admin: (cleanup) Add internal API to find a deployment given an index
authorColin Walters <walters@verbum.org>
Fri, 16 Jan 2015 17:57:39 +0000 (12:57 -0500)
committerColin Walters <walters@verbum.org>
Mon, 19 Jan 2015 18:45:11 +0000 (13:45 -0500)
At some point, we might want to expose a uniform way to refer
to deployments by an index.  At the moment undeploy is the only
command that does.

I plan to introduce another command which optionally takes an index,
so prepare a helper function for this.

src/ostree/ot-admin-builtin-undeploy.c
src/ostree/ot-admin-functions.c
src/ostree/ot-admin-functions.h

index edf89bf4242b4cedeb64ee884d11b84e076bd576..9196e5bf55c78acb267080177bf59b8d9453819f 100644 (file)
@@ -62,20 +62,10 @@ ot_admin_builtin_undeploy (int argc, char **argv, GCancellable *cancellable, GEr
   deploy_index_str = argv[1];
   deploy_index = atoi (deploy_index_str);
 
-  if (deploy_index < 0)
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
-                   "Invalid index %d", deploy_index);
-      goto out;
-    }
-  if (deploy_index >= current_deployments->len)
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
-                   "Out of range index %d, expected < %d", deploy_index, current_deployments->len);
-      goto out;
-    }
-  
-  target_deployment = g_object_ref (current_deployments->pdata[deploy_index]);
+  target_deployment = ot_admin_get_indexed_deployment (sysroot, deploy_index, error);
+  if (!target_deployment)
+    goto out;
+
   if (target_deployment == ostree_sysroot_get_booted_deployment (sysroot))
     {
       g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
index ff6235745f4498c1c85ada0c0276b9bea413496c..0c8c28f2e21743cd81acfcd271c1a20c0e157cd8 100644 (file)
@@ -71,3 +71,30 @@ ot_admin_checksum_version (GVariant *checksum)
 
   return g_strdup (ret);
 }
+
+OstreeDeployment *
+ot_admin_get_indexed_deployment (OstreeSysroot  *sysroot,
+                                 int             index,
+                                 GError        **error)
+
+{
+  gs_unref_ptrarray GPtrArray *current_deployments =
+    ostree_sysroot_get_deployments (sysroot);
+
+  if (index < 0)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+                   "Invalid index %d", index);
+      return NULL;
+    }
+  if (index >= current_deployments->len)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+                   "Out of range deployment index %d, expected < %d", index,
+                   current_deployments->len);
+      return NULL;
+    }
+  
+  return g_object_ref (current_deployments->pdata[index]);
+}
+
index ea147c84adc378f538025d427efecc646e584137..21e4a7d7d6dd1fb95170a62f183020569b9f5673 100644 (file)
@@ -36,5 +36,11 @@ ot_admin_require_booted_deployment_or_osname (OstreeSysroot       *sysroot,
 char *
 ot_admin_checksum_version (GVariant *checksum);
 
+OstreeDeployment *
+ot_admin_get_indexed_deployment (OstreeSysroot  *sysroot,
+                                 int             index,
+                                 GError        **error);
+
+
 G_END_DECLS